home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / MUI / DEFTII15.LHA / Deft II / Sources / DefaultTools.em < prev    next >
Encoding:
Text File  |  1994-11-06  |  9.9 KB  |  329 lines

  1. OPT MODULE
  2.  
  3.  
  4. ->*****
  5. ->** External modules
  6. ->*****
  7. MODULE 'muimaster' , 'libraries/mui'
  8. MODULE 'libraries/asl'
  9. MODULE 'icon'
  10. MODULE 'tools/boopsi'
  11. MODULE 'utility/tagitem'
  12. MODULE 'workbench/workbench' , 'workbench/startup'
  13.  
  14. MODULE '*Defs'
  15. MODULE '*GUI_MUIB'
  16. MODULE '*Work'
  17.  
  18.  
  19. ->*****
  20. ->** Error handling
  21. ->*****
  22. RAISE    "MEM"    IF    ParsePatternNoCase()    =    -1    ,
  23.         "MEM"    IF    Mui_AllocAslRequest()    =    NIL
  24.  
  25.  
  26. ->*****
  27. ->** Global variables
  28. ->*****
  29. EXPORT DEF deftII                    :    PTR TO obj_app
  30. EXPORT DEF modified                    :    LONG
  31. EXPORT DEF current_edited_def_tool    :    LONG
  32.  
  33. DEF new_def_tool_fr : PTR TO filerequester
  34.  
  35.  
  36. /****************************************************
  37. ** Initializes the new default tool file requester **
  38. ****************************************************/
  39. EXPORT PROC init_def_tools() IS
  40.     new_def_tool_fr := Mui_AllocAslRequest( ASL_FILEREQUEST , [    ASLFR_REJECTICONS , TRUE , TAG_DONE ] )
  41.  
  42.  
  43. /*****************************************************************/
  44. /* Adds a default tool if it isn't already there in the listview */
  45. /*****************************************************************/
  46. EXPORT PROC add_default_tool( old_def_tool : PTR TO CHAR , new_def_tool : PTR TO CHAR )
  47.  
  48.     DEF def_tool : PTR TO default_tool
  49.     DEF def_tool_tmp : PTR TO default_tool
  50.     DEF i = 0 , already_there = FALSE
  51.     DEF pattern_length
  52.     DEF return = 0
  53.  
  54.     set( deftII.lv_default_tools , MUIA_List_Quiet , MUI_TRUE )
  55.  
  56.     REPEAT
  57.  
  58.         domethod( deftII.lv_default_tools , [ MUIM_List_GetEntry , i++ , {def_tool_tmp} ] )
  59.         IF def_tool_tmp <> NIL THEN already_there := str_cmp_no_case( old_def_tool , def_tool_tmp.old )
  60.  
  61.     UNTIL ( def_tool_tmp = NIL ) OR already_there
  62.  
  63.     IF ( already_there = FALSE ) AND ( StrLen( old_def_tool ) > 0 )
  64.  
  65.         def_tool := NewR( SIZEOF default_tool )
  66.  
  67.         def_tool.old := String( StrLen( old_def_tool ) )
  68.         StrCopy( def_tool.old , old_def_tool , ALL )
  69.  
  70.         def_tool.old_raw := String ( StrLen( old_def_tool ) + 2 )
  71.         StringF( def_tool.old_raw , '\ei\s' , old_def_tool )
  72.  
  73.         def_tool.pattern := FastNew( pattern_length := StrLen( def_tool.old ) * 2 + 2 )
  74.         IF ParsePatternNoCase( def_tool.old , def_tool.pattern , pattern_length ) = 0 THEN def_tool.pattern := NIL
  75.  
  76.         def_tool.new := String( StrLen( new_def_tool ) )
  77.         StrCopy( def_tool.new , new_def_tool , ALL )
  78.  
  79.         domethod( deftII.lv_default_tools , [ MUIM_List_InsertSingle , def_tool , MUIV_List_Insert_Sorted ] )
  80.         modified := TRUE
  81.  
  82.     ELSE
  83.  
  84.         return := 10
  85.         DisplayBeep( NIL )
  86.  
  87.     ENDIF
  88.  
  89.     current_edited_def_tool := NO_CURRENT_EDITED_DEF_TOOL
  90.     domethod( deftII.app , [ MUIM_MultiSet , MUIA_String_Contents , '' ,
  91.             deftII.stR_old_def_tool , deftII.stR_PO_new_def_tool , NIL ] )
  92.  
  93.     set( deftII.lv_default_tools , MUIA_List_Quiet , FALSE )
  94.  
  95. ENDPROC
  96.  
  97.  
  98. /*******************************************************************/
  99. /* Prepares the edition of the active default tool in the listview */
  100. /*******************************************************************/
  101. EXPORT PROC edit_default_tool()
  102.  
  103.     DEF def_tool : PTR TO default_tool
  104.  
  105.     get( deftII.lv_default_tools , MUIA_List_Active , {current_edited_def_tool} )
  106.     domethod( deftII.lv_default_tools , [ MUIM_List_GetEntry , MUIV_List_GetEntry_Active , {def_tool} ] )
  107.     set( deftII.stR_old_def_tool , MUIA_String_Contents , def_tool.old )
  108.     set( deftII.stR_PO_new_def_tool , MUIA_String_Contents , def_tool.new )
  109.     set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_old_def_tool )
  110.  
  111. ENDPROC
  112.  
  113.  
  114. /***************************************************/
  115. /* Deletes the active default tool in the listview */
  116. /***************************************************/
  117. EXPORT PROC delete_default_tool()
  118.  
  119.     set( deftII.lv_default_tools , MUIA_List_Quiet , MUI_TRUE )
  120.  
  121.     domethod( deftII.lv_default_tools , [ MUIM_List_Remove , MUIV_List_Remove_Active ] )
  122.     current_edited_def_tool := NO_CURRENT_EDITED_DEF_TOOL
  123.     domethod( deftII.app , [ MUIM_MultiSet , MUIA_String_Contents , '' ,
  124.             deftII.stR_old_def_tool , deftII.stR_PO_new_def_tool , NIL ] )
  125.  
  126.     set( deftII.lv_default_tools , MUIA_List_Quiet , FALSE )
  127.  
  128.     set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.lv_default_tools )
  129.  
  130. ENDPROC
  131.  
  132.  
  133. /**************************************************************/
  134. /* Hook function called to add a default tool to the listview */
  135. /**************************************************************/
  136. EXPORT PROC app_add_default_tool( hook , obj , msg : PTR TO LONG )
  137.  
  138.     DEF app_def_tools : PTR TO appmessage
  139.     DEF one_def_tool : PTR TO wbarg
  140.     DEF icon : PTR TO diskobject
  141.     DEF old_dir , i
  142.  
  143.     app_def_tools := msg[]
  144.     one_def_tool := app_def_tools.arglist
  145.  
  146.     FOR i := 1 TO app_def_tools.numargs
  147.  
  148.         old_dir := CurrentDir( one_def_tool.lock )
  149.         icon := GetDiskObject( one_def_tool.name )
  150.  
  151.         IF ( icon = NIL ) OR ( icon.type <> WBPROJECT )
  152.  
  153.             DisplayBeep( NIL )
  154.  
  155.         ELSE
  156.  
  157.             add_default_tool( icon.defaulttool , '' )
  158.             FreeDiskObject( icon )
  159.  
  160.         ENDIF
  161.  
  162.         CurrentDir( old_dir )
  163.         one_def_tool++
  164.  
  165.     ENDFOR
  166.  
  167.     set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.lv_default_tools )
  168.  
  169. ENDPROC
  170.  
  171.  
  172. /***********************************************************/
  173. /* Hook function to display a default tool in the listview */
  174. /***********************************************************/
  175. EXPORT PROC display_def_tool( hook , string_array : PTR TO LONG , def_tool : PTR TO default_tool )
  176.  
  177.     string_array[ 0 ] := ( IF EstrLen( def_tool.new ) = 0 THEN def_tool.old_raw ELSE def_tool.old )
  178.     string_array[ 1 ] := def_tool.new
  179.  
  180. ENDPROC
  181.  
  182.  
  183. /***********************************************************************/
  184. /* Hook function to compare default tools to sort them in the listview */
  185. /***********************************************************************/
  186. EXPORT PROC compare_def_tool( hook , def_tool1 : PTR TO default_tool , def_tool2 : PTR TO default_tool )
  187.  
  188.     DEF name1 : PTR TO CHAR
  189.     DEF name2 : PTR TO CHAR
  190.  
  191.     name1 := IF EstrLen( def_tool1.new ) > 0 THEN def_tool1.old ELSE def_tool1.old_raw
  192.     name2 := IF EstrLen( def_tool2.new ) > 0 THEN def_tool2.old ELSE def_tool2.old_raw
  193.  
  194. ENDPROC OstrCmp( name1 , name2 )
  195.  
  196.  
  197. /***********************************************************/
  198. /* Hook function called before opening the pop object list */
  199. /***********************************************************/
  200. EXPORT PROC open_new_def_tools_list()
  201.  
  202.     DEF new_def_tool : PTR TO CHAR
  203.     DEF new_def_tool_tmp : PTR TO CHAR
  204.     DEF def_tool : PTR TO default_tool
  205.     DEF i = 0 , j , found = FALSE , already_there
  206.  
  207.     set( deftII.lv_new_def_tools , MUIA_List_Quiet , MUI_TRUE )
  208.  
  209.     domethod( deftII.lv_new_def_tools , [ MUIM_List_Clear ] )
  210.  
  211.     REPEAT
  212.  
  213.         domethod( deftII.lv_default_tools , [ MUIM_List_GetEntry , i++ , {def_tool} ] )
  214.  
  215.         IF ( def_tool <> NIL ) AND ( EstrLen( def_tool.new ) > 0 )
  216.  
  217.             already_there := FALSE
  218.             j := 0
  219.  
  220.             REPEAT
  221.  
  222.                 domethod( deftII.lv_new_def_tools , [ MUIM_List_GetEntry , j++ , {new_def_tool_tmp} ] )
  223.                 already_there := str_cmp_no_case( def_tool.new , new_def_tool_tmp )
  224.  
  225.             UNTIL ( new_def_tool_tmp = NIL ) OR already_there
  226.  
  227.             IF already_there = FALSE THEN domethod( deftII.lv_new_def_tools , [ MUIM_List_InsertSingle , def_tool.new , MUIV_List_Insert_Sorted ] )
  228.  
  229.         ENDIF
  230.  
  231.     UNTIL def_tool = NIL
  232.  
  233.     get( deftII.stR_PO_new_def_tool , MUIA_String_Contents , {new_def_tool} )
  234.  
  235.     i := 0
  236.  
  237.     REPEAT
  238.  
  239.         domethod( deftII.lv_new_def_tools , [ MUIM_List_GetEntry , i++ , {new_def_tool_tmp} ] )
  240.         IF new_def_tool_tmp <> NIL THEN found := str_cmp_no_case( new_def_tool , new_def_tool_tmp )
  241.  
  242.     UNTIL ( new_def_tool_tmp = NIL ) OR found
  243.  
  244.     IF found
  245.  
  246.         set( deftII.lv_new_def_tools , MUIA_List_Active , i - 1 )
  247.  
  248.     ELSE
  249.  
  250.         set( deftII.lv_new_def_tools , MUIA_List_Active , MUIV_List_Active_Top )
  251.  
  252.     ENDIF
  253.  
  254.     set( deftII.lv_new_def_tools , MUIA_List_Quiet , FALSE )
  255.  
  256. ENDPROC MUI_TRUE
  257.   
  258.  
  259. /***********************************************************/
  260. /* Hook function called before closing the pop object list */
  261. /***********************************************************/
  262. EXPORT PROC close_new_def_tools_list()
  263.  
  264.     DEF new_def_tool : PTR TO CHAR
  265.  
  266.     domethod( deftII.lv_new_def_tools , [ MUIM_List_GetEntry , MUIV_List_GetEntry_Active , {new_def_tool} ] )
  267.     set( deftII.stR_PO_new_def_tool , MUIA_String_Contents , new_def_tool )
  268.     set( deftII.wi_main , MUIA_Window_Activate , MUI_TRUE )
  269.     set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_PO_new_def_tool )
  270.  
  271. ENDPROC
  272.  
  273.  
  274. /****************************************************************************************************
  275. ** Hook function called to update the new default tool string gadget according to a file requester **
  276. ****************************************************************************************************/
  277. EXPORT PROC add_new_def_tool()
  278.  
  279.     DEF new_def_tool_name[ 256 ] : ARRAY OF CHAR
  280.  
  281.     set( deftII.app , MUIA_Application_Sleep , MUI_TRUE )
  282.  
  283.     IF Mui_AslRequest( new_def_tool_fr , [ TAG_DONE ] )
  284.  
  285.         set( deftII.app , MUIA_Application_Sleep , FALSE )
  286.  
  287.         AstrCopy( new_def_tool_name , new_def_tool_fr.drawer , 256 )
  288.         AddPart( new_def_tool_name , new_def_tool_fr.file , 256 )
  289.         set( deftII.stR_PO_new_def_tool , MUIA_String_Contents , new_def_tool_name )
  290.         set( deftII.wi_main , MUIA_Window_Activate , MUI_TRUE )
  291.         set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_PO_new_def_tool )
  292.  
  293.     ELSE
  294.  
  295.         set( deftII.app , MUIA_Application_Sleep , FALSE )
  296.  
  297.     ENDIF
  298.  
  299. ENDPROC
  300.  
  301.  
  302. /*********************************************************************************************
  303. ** Hook function called to update the new default tool string gadget according to a appicon **
  304. *********************************************************************************************/
  305. EXPORT PROC app_add_new_def_tool( hook , obj , msg : PTR TO LONG )
  306.  
  307.     DEF app_new_def_tool : PTR TO appmessage
  308.     DEF new_def_tool : PTR TO wbarg
  309.     DEF new_def_tool_name[ 256 ] : ARRAY OF CHAR
  310.  
  311.     app_new_def_tool := msg[]
  312.     new_def_tool := app_new_def_tool.arglist
  313.  
  314.     IF app_new_def_tool.numargs <> 1
  315.  
  316.         DisplayBeep( NIL )
  317.  
  318.     ELSE
  319.  
  320.         NameFromLock( new_def_tool.lock , new_def_tool_name , 256 )
  321.         AddPart( new_def_tool_name , new_def_tool.name , 256 )
  322.         set( deftII.stR_PO_new_def_tool , MUIA_String_Contents , new_def_tool_name )
  323.         set( deftII.wi_main , MUIA_Window_Activate , MUI_TRUE )
  324.         set( deftII.wi_main , MUIA_Window_ActiveObject , deftII.stR_PO_new_def_tool )
  325.  
  326.     ENDIF
  327.  
  328. ENDPROC
  329.